//成员变量：
//1.静态成员变量/类变量或者类成员
//2.非静态成员变量/普通成员变量
class Student {
    private String name;

    private int age;

    public static String classRoom = "11102教室";

    private static int size;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("带有两个参数的代码块");
    }

    //构造代码块
    {
        System.out.println("非静态代码块/实例代码块/构造代码块，一般用来初始化非静态的数据成员");
    }
    static {
        System.out.println("静态代码块-》初始化静态的数据成员/提前准备一些数据");
    }
    //静态代码块不管生成多少个对象，其只会执行一次

    //成员方法：
    //1.静态成员方法/类方法
    //2.非静态成员方法
    //建议：获取静态的成员变量或者是设置静态的成员变量，此时的方法最好是静态的，否则你要是非静态的，还需要实例化对象
    //
    public void doClass() {
        System.out.println("上课");
        func();
    }

    public static void func() {

        System.out.println("staticFunc");
    }
    public static void func2() {
        func();
        Student.func();
        System.out.println("staticFunc");

        {
            //普通代码块 （了解）
            //这块代码的执行，不需要条件
            System.out.println("定义在方法内部的代码块！普通代码块！");
        }
    }

}
//普通成员方法内部是可以使用静态的成员方法的
//静态方法里面，不能使用this的
//在静态方法内部，不能直接使用非静态的数据成员
//只要是非静态的数据成员，都需要通过对象的引用才能调用
public class Test1 {

    public void mainStaticFunc() {

    }

    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.mainStaticFunc();
        //Test1.mainStaticFunc();
        Student.func();
    }







    public static void main3(String[] args) {
        Student student1 = new Student("mbj",18);
        student1.doClass();
        student1.func();
    }
    public static void main2(String[] args) {
        Student student1 = null;
        //System.out.println(student1.name);//空指针异常
        System.out.println(Student.classRoom);
    }

    public static void main1(String[] args) {
        Student student1 = new Student("mbj",18);
        Student student2 = new Student("mbj2",19);
        Student student3 = new Student("mbj3",20);
        System.out.println(Student.classRoom);//静态成员变量不属于对象，所以不用通过对象来引用访问，直接可以通过类名就可以访问
        //静态的不依赖于任何对象
        System.out.println("asdd");

    }
}